---
title: react-native-keyboard-controller
description: A library that provides a Keyboard manager that works in an identical way on Android and iOS
sourceCodeUrl: 'https://github.com/kirillzyusko/react-native-keyboard-controller'
packageName: react-native-keyboard-controller
platforms: ['android', 'ios']
inExpoGo: true
isNew: true
---

import { BookOpen02Icon } from '@expo/styleguide-icons/outline/BookOpen02Icon';

import { APIInstallSection } from '~/components/plugins/InstallSection';
import { BoxLink } from '~/ui/components/BoxLink';
import { SnackInline } from '~/ui/components/Snippet';

`react-native-keyboard-controller` offers additional functionality beyond the built-in React Native keyboard APIs, providing consistency across Android and iOS with minimal configuration and offering the native feel users expect.

## Installation

<APIInstallSection
  packageName="react-native-keyboard-controller"
  href="https://kirillzyusko.github.io/react-native-keyboard-controller/docs/installation"
/>

## Usage

<SnackInline
  label="KeyboardController"
  dependencies={['react-native-keyboard-controller']}>

```tsx
import { TextInput, View, StyleSheet } from 'react-native';
import { KeyboardAwareScrollView, KeyboardToolbar } from 'react-native-keyboard-controller';

export default function FormScreen() {
  return (
    <>
      <KeyboardAwareScrollView bottomOffset={62} contentContainerStyle={styles.container}>
        <View>
          <TextInput placeholder="Type a message..." style={styles.textInput} />
          <TextInput placeholder="Type a message..." style={styles.textInput} />
        </View>
        <TextInput placeholder="Type a message..." style={styles.textInput} />
        <View>
          <TextInput placeholder="Type a message..." style={styles.textInput} />
          <TextInput placeholder="Type a message..." style={styles.textInput} />
          <TextInput placeholder="Type a message..." style={styles.textInput} />
        </View>
        <TextInput placeholder="Type a message..." style={styles.textInput} />
      </KeyboardAwareScrollView>
      <KeyboardToolbar />
    </>
  );
}

const styles = StyleSheet.create({
  container: {
    gap: 16,
    padding: 16,
  },
  listStyle: {
    padding: 16,
    gap: 16,
  },
  textInput: {
    width: 'auto',
    flexGrow: 1,
    flexShrink: 1,
    height: 45,
    borderWidth: 1,
    borderRadius: 8,
    borderColor: '#d8d8d8',
    backgroundColor: '#fff',
    padding: 8,
    marginBottom: 8,
  },
});
```

</SnackInline>

## Additional resources

<BoxLink
  title="Advanced keyboard handling"
  description="Learn more about advanced keyboard handling examples with Keyboard Controller"
  Icon={BookOpen02Icon}
  href="/guides/keyboard-handling/#advanced-keyboard-handling-with-keyboard-controller"
/>

<BoxLink
  title="Visit official documentation"
  description="Get full information on API and its usage."
  Icon={BookOpen02Icon}
  href="https://kirillzyusko.github.io/react-native-keyboard-controller/"
/>
